🎖️GitЯра🎖️
Node / meshtastic / Meshtastic-Android / files / core / model / src / commonMain / kotlin / org / meshtastic / core / model / Node.kt
Displaying Raw • Download
core/model/src/commonMain/kotlin/org/meshtastic/core/model/Node.kt 4e15ef1c7f68f8c683fe8b7ff741a5167e154d2e (4e15ef1c) Text, 8.64 KB
T8b949e/*
* Copyright (c) 2026 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
Tff7b72package T7ee787org.meshtastic.core.model
Tff7b72import T7ee787okio.ByteString
Tff7b72import T7ee787okio.ByteString.Companion.toByteString
Tff7b72import T7ee787org.meshtastic.core.common.util.GPSFormat
Tff7b72import T7ee787org.meshtastic.core.common.util.MetricFormatter
Tff7b72import T7ee787org.meshtastic.core.common.util.bearing
Tff7b72import T7ee787org.meshtastic.core.common.util.latLongToMeter
Tff7b72import T7ee787org.meshtastic.core.model.util.onlineTimeThreshold
Tff7b72import T7ee787org.meshtastic.core.model.util.toDistanceString
Tff7b72import T7ee787org.meshtastic.proto.AirQualityMetrics
Tff7b72import T7ee787org.meshtastic.proto.Config
Tff7b72import T7ee787org.meshtastic.proto.DeviceMetadata
Tff7b72import T7ee787org.meshtastic.proto.DeviceMetrics
Tff7b72import T7ee787org.meshtastic.proto.EnvironmentMetrics
Tff7b72import T7ee787org.meshtastic.proto.HardwareModel
Tff7b72import T7ee787org.meshtastic.proto.MeshPacket
Tff7b72import T7ee787org.meshtastic.proto.Paxcount
Tff7b72import T7ee787org.meshtastic.proto.Position
Tff7b72import T7ee787org.meshtastic.proto.PowerMetrics
Tff7b72import T7ee787org.meshtastic.proto.User
T8b949e/**
* Domain model representing a node in the mesh network.
*
* This class aggregates user information, position data, and hardware metrics.
*/
Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffMagicNumberTa5d6ff"Tb4b4b4)
Tff7b72data Tff7b72class T56d364NodeTb4b4b4(
Tff7b72val Te6edf3numTb4b4b4: Tffa657IntTb4b4b4,
Tff7b72val Te6edf3metadataTb4b4b4: Te6edf3DeviceMetadata? Tff7b72= Tff7b72nullTb4b4b4,
Tff7b72val Te6edf3userTb4b4b4: Te6edf3User Tff7b72= Te6edf3UserTb4b4b4(Tb4b4b4)Tb4b4b4,
Tff7b72val Te6edf3positionTb4b4b4: Te6edf3Position Tff7b72= Te6edf3PositionTb4b4b4(Tb4b4b4)Tb4b4b4,
Tff7b72val Te6edf3snrTb4b4b4: Tffa657Float Tff7b72= Tffa657FloatTb4b4b4.Te6edf3MAX_VALUETb4b4b4,
Tff7b72val Te6edf3rssiTb4b4b4: Tffa657Int Tff7b72= Tffa657IntTb4b4b4.Te6edf3MAX_VALUETb4b4b4,
Tff7b72val Te6edf3lastHeardTb4b4b4: Tffa657Int Tff7b72= T79c0ff0Tb4b4b4, T8b949e// the last time we've seen this node in secs since 1970
Tff7b72val Te6edf3deviceMetricsTb4b4b4: Te6edf3DeviceMetrics Tff7b72= Te6edf3DeviceMetricsTb4b4b4(Tb4b4b4)Tb4b4b4,
Tff7b72val Te6edf3channelTb4b4b4: Tffa657Int Tff7b72= T79c0ff0Tb4b4b4,
Tff7b72val Te6edf3viaMqttTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Tff7b72val Te6edf3hopsAwayTb4b4b4: Tffa657Int Tff7b72= Tff7b72-T79c0ff1Tb4b4b4,
Tff7b72val Te6edf3isFavoriteTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Tff7b72val Te6edf3isIgnoredTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Tff7b72val Te6edf3isMutedTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Tff7b72val Te6edf3environmentMetricsTb4b4b4: Te6edf3EnvironmentMetrics Tff7b72= Te6edf3EnvironmentMetricsTb4b4b4(Tb4b4b4)Tb4b4b4,
Tff7b72val Te6edf3powerMetricsTb4b4b4: Te6edf3PowerMetrics Tff7b72= Te6edf3PowerMetricsTb4b4b4(Tb4b4b4)Tb4b4b4,
Tff7b72val Te6edf3airQualityMetricsTb4b4b4: Te6edf3AirQualityMetrics Tff7b72= Te6edf3AirQualityMetricsTb4b4b4(Tb4b4b4)Tb4b4b4,
Tff7b72val Te6edf3paxcounterTb4b4b4: Te6edf3Paxcount Tff7b72= Te6edf3PaxcountTb4b4b4(Tb4b4b4)Tb4b4b4,
Tff7b72val Te6edf3publicKeyTb4b4b4: Te6edf3ByteString? Tff7b72= Tff7b72nullTb4b4b4,
Tff7b72val Te6edf3notesTb4b4b4: Tffa657String Tff7b72= Ta5d6ff"Ta5d6ff"Tb4b4b4,
Tff7b72val Te6edf3manuallyVerifiedTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4,
Tff7b72val Te6edf3nodeStatusTb4b4b4: Tffa657String? Tff7b72= Tff7b72nullTb4b4b4,
T8b949e/** The transport mechanism this node was last heard over (see [MeshPacket.TransportMechanism]). */
Tff7b72val Te6edf3lastTransportTb4b4b4: Tffa657Int Tff7b72= T79c0ff0Tb4b4b4,
Tb4b4b4) Tb4b4b4{
Tff7b72val Te6edf3capabilitiesTb4b4b4: Te6edf3Capabilities Tff7b72by Te6edf3lazy Tb4b4b4{ Te6edf3CapabilitiesTb4b4b4(Te6edf3metadataTff7b72?.Te6edf3firmware_versionTb4b4b4) Tb4b4b4}
Tff7b72val Te6edf3isOnlineTb4b4b4: Tffa657Boolean
Tff7b72getTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3lastHeard Tff7b72> Te6edf3onlineTimeThresholdTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3colorsTb4b4b4: Te6edf3PairTff7b72<Tffa657IntTb4b4b4, Tffa657IntTff7b72>
Tff7b72getTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3nodeColorsFromNumTb4b4b4(Te6edf3numTb4b4b4)
Tff7b72val Te6edf3isUnknownUser
Tff7b72getTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3userTb4b4b4.Te6edf3hw_model Tff7b72=Tff7b72= Te6edf3HardwareModelTb4b4b4.Te6edf3UNSET
Tff7b72val Te6edf3hasPKC
Tff7b72getTb4b4b4(Tb4b4b4) Tff7b72= Tb4b4b4(Te6edf3publicKey Tff7b72?: Te6edf3userTb4b4b4.Te6edf3public_keyTb4b4b4)Tb4b4b4.Te6edf3size Tff7b72> T79c0ff0
Tff7b72val Te6edf3mismatchKey
Tff7b72getTb4b4b4(Tb4b4b4) Tff7b72= Tb4b4b4(Te6edf3publicKey Tff7b72?: Te6edf3userTb4b4b4.Te6edf3public_keyTb4b4b4) Tff7b72=Tff7b72= Te6edf3ERROR_BYTE_STRING
Tff7b72val Te6edf3hasEnvironmentMetricsTb4b4b4: Tffa657Boolean
Tff7b72getTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3environmentMetrics Tff7b72!Tff7b72= Te6edf3EnvironmentMetricsTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3hasPowerMetricsTb4b4b4: Tffa657Boolean
Tff7b72getTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3powerMetrics Tff7b72!Tff7b72= Te6edf3PowerMetricsTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3hasAirQualityMetricsTb4b4b4: Tffa657Boolean
Tff7b72getTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3airQualityMetrics Tff7b72!Tff7b72= Te6edf3AirQualityMetricsTb4b4b4(Tb4b4b4)
Tff7b72val Te6edf3batteryLevel
Tff7b72getTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3deviceMetricsTb4b4b4.Te6edf3battery_level
Tff7b72val Te6edf3voltage
Tff7b72getTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3deviceMetricsTb4b4b4.Te6edf3voltage
Tff7b72val Te6edf3batteryStr
Tff7b72getTb4b4b4(Tb4b4b4) Tff7b72= Tff7b72if Tb4b4b4(Tb4b4b4(Te6edf3batteryLevel Tff7b72?: T79c0ff0Tb4b4b4) Tff7b72in T79c0ff1.Tb4b4b4.T79c0ff1T79c0ff0T79c0ff0Tb4b4b4) Ta5d6ff"Tffd700$Te6edf3batteryLevelTa5d6ff%Ta5d6ff" Tff7b72else Ta5d6ff"Ta5d6ff"
Tff7b72val Te6edf3latitude
Tff7b72getTb4b4b4(Tb4b4b4) Tff7b72= Tb4b4b4(Te6edf3positionTb4b4b4.Te6edf3latitude_i Tff7b72?: T79c0ff0Tb4b4b4) Tff7b72* T79c0ff1e-7
Tff7b72val Te6edf3longitude
Tff7b72getTb4b4b4(Tb4b4b4) Tff7b72= Tb4b4b4(Te6edf3positionTb4b4b4.Te6edf3longitude_i Tff7b72?: T79c0ff0Tb4b4b4) Tff7b72* T79c0ff1e-7
Tff7b72private Tff7b72fun Td2a8ffhasValidPositionTb4b4b4(Tb4b4b4)Tb4b4b4: Tffa657Boolean Tff7b72= Te6edf3latitude Tff7b72!Tff7b72= T79c0ff0.0 Tff7b72&Tff7b72&
Te6edf3longitude Tff7b72!Tff7b72= T79c0ff0.0 Tff7b72&Tff7b72&
Tb4b4b4(Te6edf3latitude Tff7b72>Tff7b72= Tff7b72-T79c0ff9T79c0ff0 Tff7b72&Tff7b72& Te6edf3latitude Tff7b72<Tff7b72= T79c0ff9T79c0ff0.0Tb4b4b4) Tff7b72&Tff7b72&
Tb4b4b4(Te6edf3longitude Tff7b72>Tff7b72= Tff7b72-T79c0ff1T79c0ff8T79c0ff0 Tff7b72&Tff7b72& Te6edf3longitude Tff7b72<Tff7b72= T79c0ff1T79c0ff8T79c0ff0Tb4b4b4)
Tff7b72val Te6edf3validPositionTb4b4b4: Te6edf3Position?
Tff7b72getTb4b4b4(Tb4b4b4) Tff7b72= Te6edf3positionTb4b4b4.Te6edf3takeIf Tb4b4b4{ Te6edf3hasValidPositionTb4b4b4(Tb4b4b4) Tb4b4b4}
T8b949e// @return distance in meters to some other node (or null if unknown)
Tff7b72fun Td2a8ffdistanceTb4b4b4(Te6edf3oTb4b4b4: Te6edf3NodeTb4b4b4)Tb4b4b4: Tffa657Int? Tff7b72= Tff7b72when Tb4b4b4{
Te6edf3validPosition Tff7b72=Tff7b72= Tff7b72null Tff7b72|Tff7b72| Te6edf3oTb4b4b4.Te6edf3validPosition Tff7b72=Tff7b72= Tff7b72null Tff7b72-Tff7b72> Tff7b72null
Tff7b72else Tff7b72-Tff7b72> Te6edf3latLongToMeterTb4b4b4(Te6edf3latitudeTb4b4b4, Te6edf3longitudeTb4b4b4, Te6edf3oTb4b4b4.Te6edf3latitudeTb4b4b4, Te6edf3oTb4b4b4.Te6edf3longitudeTb4b4b4)Tb4b4b4.Te6edf3toIntTb4b4b4(Tb4b4b4)
Tb4b4b4}
T8b949e// @return formatted distance string to another node, using the given display units
Tff7b72fun Td2a8ffdistanceStrTb4b4b4(Te6edf3oTb4b4b4: Te6edf3NodeTb4b4b4, Te6edf3displayUnitsTb4b4b4: Te6edf3ConfigTb4b4b4.Te6edf3DisplayConfigTb4b4b4.Te6edf3DisplayUnitsTb4b4b4)Tb4b4b4: Tffa657String? Tff7b72=
Te6edf3distanceTb4b4b4(Te6edf3oTb4b4b4)Tff7b72?.Te6edf3toDistanceStringTb4b4b4(Te6edf3displayUnitsTb4b4b4)
T8b949e// @return bearing to the other position in degrees
Tff7b72fun Td2a8ffbearingTb4b4b4(Te6edf3oTb4b4b4: Te6edf3Node?Tb4b4b4)Tb4b4b4: Tffa657Int? Tff7b72= Tff7b72when Tb4b4b4{
Te6edf3validPosition Tff7b72=Tff7b72= Tff7b72null Tff7b72|Tff7b72| Te6edf3oTff7b72?.Te6edf3validPosition Tff7b72=Tff7b72= Tff7b72null Tff7b72-Tff7b72> Tff7b72null
Tff7b72else Tff7b72-Tff7b72> Te6edf3bearingTb4b4b4(Te6edf3latitudeTb4b4b4, Te6edf3longitudeTb4b4b4, Te6edf3oTb4b4b4.Te6edf3latitudeTb4b4b4, Te6edf3oTb4b4b4.Te6edf3longitudeTb4b4b4)Tb4b4b4.Te6edf3toIntTb4b4b4(Tb4b4b4)
Tb4b4b4}
Tff7b72fun Td2a8ffgpsStringTb4b4b4(Tb4b4b4)Tb4b4b4: Tffa657String Tff7b72= Te6edf3GPSFormatTb4b4b4.Te6edf3toDecTb4b4b4(Te6edf3latitudeTb4b4b4, Te6edf3longitudeTb4b4b4)
Tf0883e@SuppressTb4b4b4(Ta5d6ff"Ta5d6ffCyclomaticComplexMethodTa5d6ff"Tb4b4b4)
Tff7b72private Tff7b72fun Te6edf3EnvironmentMetricsTb4b4b4.Td2a8ffgetDisplayStringsTb4b4b4(Te6edf3isFahrenheitTb4b4b4: Tffa657BooleanTb4b4b4)Tb4b4b4: Te6edf3ListTff7b72<Tffa657StringTff7b72> Tb4b4b4{
Tff7b72val Te6edf3temp Tff7b72=
Tff7b72if Tb4b4b4(Tb4b4b4(Te6edf3temperature Tff7b72?: T79c0ff0fTb4b4b4) Tff7b72!Tff7b72= T79c0ff0fTb4b4b4) Tb4b4b4{
Te6edf3MetricFormatterTb4b4b4.Te6edf3temperatureTb4b4b4(Te6edf3temperature Tff7b72?: T79c0ff0fTb4b4b4, Te6edf3isFahrenheitTb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72null
Tb4b4b4}
Tff7b72val Te6edf3humidity Tff7b72= Tff7b72if Tb4b4b4(Tb4b4b4(Te6edf3relative_humidity Tff7b72?: T79c0ff0fTb4b4b4) Tff7b72!Tff7b72= T79c0ff0fTb4b4b4) Te6edf3MetricFormatterTb4b4b4.Te6edf3humidityTb4b4b4(Te6edf3relative_humidity Tff7b72?: T79c0ff0fTb4b4b4) Tff7b72else Tff7b72null
Tff7b72val Te6edf3soilTemperatureStr Tff7b72=
Tff7b72if Tb4b4b4(Tb4b4b4(Te6edf3soil_temperature Tff7b72?: T79c0ff0fTb4b4b4) Tff7b72!Tff7b72= T79c0ff0fTb4b4b4) Tb4b4b4{
Te6edf3MetricFormatterTb4b4b4.Te6edf3temperatureTb4b4b4(Te6edf3soil_temperature Tff7b72?: T79c0ff0fTb4b4b4, Te6edf3isFahrenheitTb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72null
Tb4b4b4}
Tff7b72val Te6edf3soilMoistureRange Tff7b72= T79c0ff0.Tb4b4b4.T79c0ff1T79c0ff0T79c0ff0
Tff7b72val Te6edf3soilMoisture Tff7b72=
Tff7b72if Tb4b4b4(Tb4b4b4(Te6edf3soil_moisture Tff7b72?: Tffa657IntTb4b4b4.Te6edf3MIN_VALUETb4b4b4) Tff7b72in Te6edf3soilMoistureRange Tff7b72&Tff7b72& Tb4b4b4(Te6edf3soil_temperature Tff7b72?: T79c0ff0fTb4b4b4) Tff7b72!Tff7b72= T79c0ff0fTb4b4b4) Tb4b4b4{
Te6edf3MetricFormatterTb4b4b4.Te6edf3percentTb4b4b4(Te6edf3soil_moisture Tff7b72?: T79c0ff0Tb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72null
Tb4b4b4}
Tff7b72val Te6edf3voltage Tff7b72= Tff7b72if Tb4b4b4(Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3voltage Tff7b72?: T79c0ff0fTb4b4b4) Tff7b72!Tff7b72= T79c0ff0fTb4b4b4) Te6edf3MetricFormatterTb4b4b4.Te6edf3voltageTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3voltage Tff7b72?: T79c0ff0fTb4b4b4) Tff7b72else Tff7b72null
Tff7b72val Te6edf3current Tff7b72= Tff7b72if Tb4b4b4(Tb4b4b4(Te6edf3current Tff7b72?: T79c0ff0fTb4b4b4) Tff7b72!Tff7b72= T79c0ff0fTb4b4b4) Te6edf3MetricFormatterTb4b4b4.Te6edf3currentTb4b4b4(Te6edf3current Tff7b72?: T79c0ff0fTb4b4b4) Tff7b72else Tff7b72null
Tff7b72val Te6edf3iaq Tff7b72= Tff7b72if Tb4b4b4(Tb4b4b4(Te6edf3iaq Tff7b72?: T79c0ff0Tb4b4b4) Tff7b72!Tff7b72= T79c0ff0Tb4b4b4) Ta5d6ff"Ta5d6ffIAQ: Tffd700$Te6edf3iaqTa5d6ff" Tff7b72else Tff7b72null
Tff7b72return Te6edf3listOfNotNullTb4b4b4(
Te6edf3paxcounterTb4b4b4.Te6edf3getDisplayStringTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3tempTb4b4b4,
Te6edf3humidityTb4b4b4,
Te6edf3soilTemperatureStrTb4b4b4,
Te6edf3soilMoistureTb4b4b4,
Te6edf3voltageTb4b4b4,
Te6edf3currentTb4b4b4,
Te6edf3iaqTb4b4b4,
Tb4b4b4)
Tb4b4b4}
Tff7b72private Tff7b72fun Te6edf3PaxcountTb4b4b4.Td2a8ffgetDisplayStringTb4b4b4(Tb4b4b4) Tff7b72= Ta5d6ff"Ta5d6ffPAX: Tffd700${Te6edf3ble Tff7b72+ Te6edf3wifiTffd700}Ta5d6ff (B:Tffd700$Te6edf3bleTa5d6ff/W:Tffd700$Te6edf3wifiTa5d6ff)Ta5d6ff"Tb4b4b4.Te6edf3takeIf Tb4b4b4{ Te6edf3ble Tff7b72!Tff7b72= T79c0ff0 Tff7b72|Tff7b72| Te6edf3wifi Tff7b72!Tff7b72= T79c0ff0 Tb4b4b4}
Tff7b72fun Td2a8ffgetTelemetryStringsTb4b4b4(Te6edf3isFahrenheitTb4b4b4: Tffa657Boolean Tff7b72= Tff7b72falseTb4b4b4)Tb4b4b4: Te6edf3ListTff7b72<Tffa657StringTff7b72> Tff7b72=
Te6edf3environmentMetricsTb4b4b4.Te6edf3getDisplayStringsTb4b4b4(Te6edf3isFahrenheitTb4b4b4)
Tff7b72companion Tff7b72object Tb4b4b4{
Tff7b72private Tff7b72const Tff7b72val Te6edf3DEFAULT_ID_SUFFIX_LENGTH Tff7b72= T79c0ff4
Tff7b72private Tff7b72const Tff7b72val Te6edf3RELAY_NODE_SUFFIX_MASK Tff7b72= T79c0ff0Te6edf3xFF
Tff7b72val Te6edf3ERROR_BYTE_STRINGTb4b4b4: Te6edf3ByteString Tff7b72= Te6edf3ByteArrayTb4b4b4(T79c0ff3T79c0ff2Tb4b4b4) Tb4b4b4{ T79c0ff0 Tb4b4b4}Tb4b4b4.Te6edf3toByteStringTb4b4b4(Tb4b4b4)
Tff7b72fun Td2a8ffgetRelayNodeTb4b4b4(Te6edf3relayNodeIdTb4b4b4: Tffa657IntTb4b4b4, Te6edf3nodesTb4b4b4: Te6edf3ListTff7b72<Te6edf3NodeTff7b72>Tb4b4b4, Te6edf3ourNodeNumTb4b4b4: Tffa657Int?Tb4b4b4)Tb4b4b4: Te6edf3Node? Tb4b4b4{
Tff7b72val Te6edf3relayNodeIdSuffix Tff7b72= Te6edf3relayNodeId Te6edf3and Te6edf3RELAY_NODE_SUFFIX_MASK
Tff7b72val Te6edf3candidateRelayNodes Tff7b72=
Te6edf3nodesTb4b4b4.Te6edf3filter Tb4b4b4{
Tffa657itTb4b4b4.Te6edf3num Tff7b72!Tff7b72= Te6edf3ourNodeNum Tff7b72&Tff7b72&
Tffa657itTb4b4b4.Te6edf3lastHeard Tff7b72!Tff7b72= T79c0ff0 Tff7b72&Tff7b72&
Tb4b4b4(Tffa657itTb4b4b4.Te6edf3num Te6edf3and Te6edf3RELAY_NODE_SUFFIX_MASKTb4b4b4) Tff7b72=Tff7b72= Te6edf3relayNodeIdSuffix
Tb4b4b4}
Tff7b72val Te6edf3closestRelayNode Tff7b72=
Tff7b72if Tb4b4b4(Te6edf3candidateRelayNodesTb4b4b4.Te6edf3size Tff7b72=Tff7b72= T79c0ff1Tb4b4b4) Tb4b4b4{
Te6edf3candidateRelayNodesTb4b4b4.Te6edf3firstTb4b4b4(Tb4b4b4)
Tb4b4b4} Tff7b72else Tb4b4b4{
Te6edf3candidateRelayNodesTb4b4b4.Te6edf3minByOrNull Tb4b4b4{ Tffa657itTb4b4b4.Te6edf3hopsAway Tb4b4b4}
Tb4b4b4}
Tff7b72return Te6edf3closestRelayNode
Tb4b4b4}
T8b949e/** Creates a fallback [Node] when the node is not found in the database. */
Tff7b72fun Td2a8ffcreateFallbackTb4b4b4(Te6edf3nodeNumTb4b4b4: Tffa657IntTb4b4b4, Te6edf3fallbackNamePrefixTb4b4b4: Tffa657StringTb4b4b4)Tb4b4b4: Te6edf3Node Tb4b4b4{
Tff7b72val Te6edf3userId Tff7b72= Te6edf3NodeAddressTb4b4b4.Te6edf3numToDefaultIdTb4b4b4(Te6edf3nodeNumTb4b4b4)
Tff7b72val Te6edf3safeUserId Tff7b72= Te6edf3userIdTb4b4b4.Te6edf3padStartTb4b4b4(Te6edf3DEFAULT_ID_SUFFIX_LENGTHTb4b4b4, Ta5d6ff'0'Tb4b4b4)Tb4b4b4.Te6edf3takeLastTb4b4b4(Te6edf3DEFAULT_ID_SUFFIX_LENGTHTb4b4b4)
Tff7b72val Te6edf3longName Tff7b72= Ta5d6ff"Tffd700$Te6edf3fallbackNamePrefixTa5d6ff Tffd700$Te6edf3safeUserIdTa5d6ff"
Tff7b72val Te6edf3defaultUser Tff7b72=
Te6edf3UserTb4b4b4(Te6edf3id Tff7b72= Te6edf3userIdTb4b4b4, Te6edf3long_name Tff7b72= Te6edf3longNameTb4b4b4, Te6edf3short_name Tff7b72= Te6edf3safeUserIdTb4b4b4, Te6edf3hw_model Tff7b72= Te6edf3HardwareModelTb4b4b4.Te6edf3UNSETTb4b4b4)
Tff7b72return Te6edf3NodeTb4b4b4(Te6edf3num Tff7b72= Te6edf3nodeNumTb4b4b4, Te6edf3user Tff7b72= Te6edf3defaultUserTb4b4b4)
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}
Tff7b72fun Te6edf3ConfigTb4b4b4.Td2a8ffDeviceConfigTb4b4b4.Te6edf3RoleTff7b72?.Te6edf3isUnmessageableRoleTb4b4b4(Tb4b4b4)Tb4b4b4: Tffa657Boolean Tff7b72= Tff7b72this Tff7b72in
Te6edf3listOfTb4b4b4(
Te6edf3ConfigTb4b4b4.Te6edf3DeviceConfigTb4b4b4.Te6edf3RoleTb4b4b4.Te6edf3REPEATERTb4b4b4,
Te6edf3ConfigTb4b4b4.Te6edf3DeviceConfigTb4b4b4.Te6edf3RoleTb4b4b4.Te6edf3ROUTERTb4b4b4,
Te6edf3ConfigTb4b4b4.Te6edf3DeviceConfigTb4b4b4.Te6edf3RoleTb4b4b4.Te6edf3ROUTER_LATETb4b4b4,
Te6edf3ConfigTb4b4b4.Te6edf3DeviceConfigTb4b4b4.Te6edf3RoleTb4b4b4.Te6edf3SENSORTb4b4b4,
Te6edf3ConfigTb4b4b4.Te6edf3DeviceConfigTb4b4b4.Te6edf3RoleTb4b4b4.Te6edf3TRACKERTb4b4b4,
Te6edf3ConfigTb4b4b4.Te6edf3DeviceConfigTb4b4b4.Te6edf3RoleTb4b4b4.Te6edf3TAK_TRACKERTb4b4b4,
Tb4b4b4)
Served by rngit 1.5.0 - Generated in 0.11s